package com.atde._03_creational_design_patterns.singleton.type02;


/**
 * @BelongsProject: hsp_java_design_mode
 * @BelongsPackage: com.atde._03_creational_design_patterns.singleton.type02
 * @Author: Del
 * @CreateTime: 2025-05-26  01:59
 * @Description: 单例模式写法2 -- 饿汉式（静态代码块）
 * @Version: 1.0
 */
public class SingletonTest02 {
    public static void main(String[] args) {
        // 测试
        Singleton instance =Singleton.getInstance();
        Singleton singleton  = Singleton.getInstance();

        System.out.println(instance == singleton);
    }
}


/**
 * 饿汉式（静态代码块）
 * 1）这种方式与饿汉式（静态常量）的方法类似，只不过将类实例化的过程放在了静态代码块中
 * 也是在在类装载的时候，就执行静态代码块中的代码，初始化类的实例。优缺点和饿汉式（静态常量）一样
 * 2）结论：这种单实例模式可用，但是可能造成内存浪费
 */
class Singleton {

    // 1. 构造器私有化
    private Singleton() {
    }

    // 2. 在静态代码块中创建单例
    private static final Singleton instance;

    static { // 在静态代码块中，创建单例对象
        instance = new Singleton();
    }


    // 3. 提供一个公有的静态方法， 返回实例对象
    public static Singleton getInstance() {
        return instance;
    }
}
